#include <stdio.h>
#include <stdint.h>

//#define DBG

#ifdef DBG
#define T                      \
    printf("%13d", map[i][j]); \
    fflush(stdout);
#define TT                                  \
    for (__int128_t i = 0; i <= n; ++i)     \
    {                                       \
        for (__int128_t j = 0; j <= m; ++j) \
        {                                   \
            printf("%13d", map[i][j]);      \
        }                                   \
        printf("\n");                       \
    }                                       \
    printf("\n")
#define N printf("\n")
#else
#define T
#define TT
#define N
#endif

void write(__int128_t x)
{
    if (x < 0)
        x = -x, putchar('-');
    if (x > 9)
        write(x / 10);
    putchar(x % 10 + '0');
}

const __int128_t Horse = -1;

// x, y
__int128_t n, m;
__int128_t map[23][23] = {0};
__int128_t map0 = 0;
// x, y
__int128_t hx, hy;

__int128_t &p(__int128_t x, __int128_t y)
{
    if (x < 0)
        return map0;
    if (y < 0)
        return map0;
    if (x > n)
        return map0;
    if (y > m)
        return map0;
    return map[x][y];
}

int main()
{
    scanf("%d%d%d%d", &n, &m, &hx, &hy);

    if (hx == 0 && hy == 0)
    {
        printf("0");
        return 0;
    }

    // setpos of horse point
    p(hx, hy) = Horse;
    p(hx - 1, hy - 2) = Horse;
    p(hx - 1, hy + 2) = Horse;
    p(hx + 1, hy - 2) = Horse;
    p(hx + 1, hy + 2) = Horse;
    p(hx - 2, hy - 1) = Horse;
    p(hx - 2, hy + 1) = Horse;
    p(hx + 2, hy - 1) = Horse;
    p(hx + 2, hy + 1) = Horse;

    map[0][0] = 1;

    TT;

    for (__int128_t i = 1; i <= n; ++i)
    {
        if (map[i][0] == Horse)
        {
            continue;
        }
        if (map[i - 1][0] == Horse)
        {
            map[i][0] = 0; // no way to here
            continue;
        }
        map[i][0] = map[i - 1][0]; // there are same
    }

    TT;

    for (__int128_t j = 1; j <= m; ++j)
    {
        if (map[0][j] == Horse)
        {
            continue;
        }
        if (map[0][j - 1] == Horse)
        {
            map[0][j] = 0; // no way to here
            continue;
        }
        map[0][j] = map[0][j - 1]; // there are same
    }

    TT;

    // the last area
    for (__int128_t i = 1; i <= n; ++i)
    {
        for (__int128_t j = 1; j <= m; ++j)
        {
            if (map[i][j] == Horse)
            {
                T continue; // pass
            }
            bool uplock = map[i - 1][j] == Horse;
            bool leftlock = map[i][j - 1] == Horse;
            if (uplock && leftlock)
            {
                map[i][j] == 0;
                T continue;
            }
            if (uplock)
            {
                map[i][j] = map[i][j - 1];
                T continue;
            }
            if (leftlock)
            {
                map[i][j] = map[i - 1][j];
                T continue;
            }
            map[i][j] = map[i - 1][j] + map[i][j - 1];
            T
        }
        N;
    }

    TT;

    // printf("%lld", map[n][m]);
    write(map[n][m]);
    return 0;
}